VUE手动实现手风琴折叠面板,不用组件

您所在的位置:网站首页 element 折叠面板手动激活 VUE手动实现手风琴折叠面板,不用组件

VUE手动实现手风琴折叠面板,不用组件

2024-04-04 19:39| 来源: 网络整理| 查看: 265

Table of Contents

1、在需要点击触发事件的位置加上click事件

2、在点击区域内合适的地方加上图标

3、实现foldSwitch方法

4、实现changeStyle方法

VUE+element UI

这里简单记录如何手动实现手风琴,在使用不了现成的情况下,因为涉及到公司项目,所以一下总结的比较稀碎,合适有vue和element UI的基础的同学看,请见谅,我会把关键的点都记录下来。

1、在需要点击触发事件的位置加上click事件 @click="foldSwitch(index)"

 foldSwitch方法是点击的时候触发的,实现的目标有二:

1,实现该点击的列表展开或关闭

2,在点击列表展开的同时,其他列表要关闭

index:是for循环遍历的index,这个是用来判断是第几项被点击的。

2、在点击区域内合适的地方加上图标

这个是跟折叠面板的图标一样,展开的时候箭头向下,折叠的时候箭头向右。

status是个数组:

status: [false, false, false],

为什么我需要status?我的实际情况是我能确定的我的折叠面板最多三个,里面初始化都是false,说明都是默认折叠的。

比如说我点击了第一个列表,index=1,那么此时的status为status: [true, false, false],导致的情况是第一个列表的图标变化。以此类推。

3、实现foldSwitch方法 foldSwitch(index) { //折叠 if (this.status[index]) { this.changeStyle("none", ".el-collapse", index); this.status= [...this.status]; this.status[index] = false; } //展开 else { for (let i = 0; i < this.neighbourVesselsTableData.length; i++) { if (i == index) { this.changeStyle("block", ".el-collapse", index); this.status= [...this.status]; this.status[index] = true; } else { this.status= [...this.status]; this.changeStyle("none", ".el-collapse", i); this.status[i] = false; } } } },

changeStyle方法接下来细讲。

折叠的状态是从true变为false,所以先完成折叠操作,在给status重新赋值。

至于为什么要多写一句

this.status= [...this.status];

这个是重点也是关键

因为每次点击触发展开或折叠操作,变化的是status数组里面的数据,不是整个status数组,所以vue是检测不到status是已经发生改变的,解决办法就是加上面这句,让status重新生成,地址变化,vue检测到变化就会自动渲染到页面上,这时展开或折叠才会发生视觉效果。

 

展开也是重点,因为是手风琴,所以只能展开一项。我用到了for循环,判断是否等于当前点击的这一列表,如果是,该列表会展开,其他都会折叠,这样就达到了手风琴效果。

4、实现changeStyle方法 changeStyle(status, className, index) { let dom = document.querySelectorAll(className); dom[index].style.display = status; },

该方法是比较原生的了,直接操作dom节点让列表展示或消失。

status:状态,“none”表示折叠,“block”表示展开;

className:类名,被折叠或展开的类名;

index:索引,表示该类名的dom节点的第几个,也就是第几个列表被展开或折叠。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3